package com.cn.lp.ai.factory;

import io.micrometer.common.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;

import java.util.Optional;

/**
 * 解决方案:
 * https://sca.aliyun.com/en/docs/ai/tutorials/vectorstore/#%E7%A4%BA%E4%BE%8B%E7%94%A8%E6%B3%95
 * https://blog.csdn.net/weixin_46203834/article/details/140807594
 *
 * 我们要记住一点，大模型是无状态的，它看到的只有当前这一轮对话的内容。因此如果要支持多轮对话效果，
 * 需要应用每次都要把之前的对话上下文保留下来，并与最新的问题一并作为 prompt 发送给模型。
 * 这时，我们可以利用 Spring AI Alibaba 提供的内置 Conversation Memory 支持，方便的维护对话上下文。
 */
@SpringBootApplication
@Slf4j
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
        String port = "8080";
        String urlContext = "/";
        Optional<Environment> environmentOpt = SpringAide.getEnvironment();
        if(environmentOpt.isPresent()) {
            Environment environment = environmentOpt.get();
            String portEle = environment.getProperty("server.port");
            // 进入调试模式
            if(!StringUtils.isBlank(portEle)) {
                port = portEle;
            }
            String[] actives=environment.getActiveProfiles();
            if(actives.length>0){
                log.info("start application with env={}",actives[0]);
            }
            String urlContextEle = environment.getProperty("server.servlet.context-path");
            // 进入调试模式
            if(!StringUtils.isBlank(urlContextEle)) {
                urlContext = urlContextEle.startsWith("/") ? urlContextEle : "/" + urlContextEle;
            }
        }
        log.info("http://localhost:"+ port + urlContext + "服务启动成功");
        InitService initService = SpringAide.getBean(InitService.class);
        initService.init();
    }


}